{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Answers to Assignment 9 - Statistics and Interactive Visualization\n",
    "\n",
    "Complete the tasks below. Please turn in a single Jupyter notebook named `9_first_last.ipynb` (substitute your first and last name). Please run Kernel > Restart & Run All on your notebook before turning in.\n",
    "\n",
    "#### A. Student survey data wrangling\n",
    "\n",
    "1. Download the student survey data from [2015](https://raw.githubusercontent.com/cuttlefishh/python-for-data-analysis/master/data/survey_scores_2015_T.csv) and [2018](https://raw.githubusercontent.com/cuttlefishh/python-for-data-analysis/master/data/survey_scores_2018.csv) if you don't have them already.\n",
    "2. Import the csv files as DataFrames and inspect the files. Notice that the data are formatted differently. Next you will modify them so they are compatible.\n",
    "3. The 2015 data is mostly ready to go. Just convert the Y/N values to True/False (boolean).\n",
    "4. The 2018 data needs a lot of work. Delete the 'Timestamp' and 'Graduate program and advisor' columns. Rename the remaining columns to match those in 2015. Convert the Yes/No values to True/False (boolean). Convert the None/Some/Moderate/Experienced values to 0/1/2/3 (integers). \n",
    "\n",
    "#### B. Statistical analysis\n",
    "\n",
    "1. In both years, some students have Macs and some have Windows computers. Test the hypothesis that the proportions of Mac and Windows users are the same in 2015 and 2018. Note that in 2018, the question was asked differently and some people listed multiple operating systems; for the purposes of this question, assume that SDNT6 and SDNT10 have Windows computers and SDNT7 has a Mac.\n",
    "2. For each of the 'score' columns shared by both datasets (there are five), use a two-sample *t*-test to determine if the two samples have equal means. Note: To use `scipy.stats`, you may have to import it directly like so: `from scipy import stats`.\n",
    "\n",
    "#### C. Stock data\n",
    "\n",
    "1. Download historical stock data from the past three years for a stock of your choice (eligible symbols: [here](https://iextrading.com/trading/eligible-symbols/)) and the S&P 500 index (symbol: 'SPY'). Use Panads timeseries operations to calculate the start and end dates. IEX is currently a reliable source of data that does not require registration (see [pandas-datareader docs](https://pydata.github.io/pandas-datareader/stable/remote_data.html)). Note that using IEX will return a hierarchical column index, where the first column index is the price type ('open', 'high', 'low', 'close', 'volume') and the second column index is the symbol. You may also want to convert the index from string/object type to datetime type. For example, to download stock data for Qualcomm and Illumina and see the close data for Qualcomm, use these commands, where `start` and `end` are Pandas datatime objects: \n",
    "\n",
    "        import pandas_datareader as pdr\n",
    "        quotes = pdr.data.DataReader(['QCOM', 'ILMN'], 'iex', start, end)\n",
    "        quotes.set_index(pd.to_datetime(quotes.index), inplace=True)\n",
    "        quotes['close']['QCOM']\n",
    "\n",
    "2. Calculate the 52-week high and low for the past year for your stock and for the S&P 500.\n",
    "3. Plot the price at close over the past three years of your stock and the S&P 500. Use a dual y-axis (using `twinx` like we learned in the Matplotlib lesson) to display the two prices side by side on separate scales.\n",
    "4. Calculate the percent change from three years ago for both prices. How did your stock perform relative to the S&P 500?\n",
    "\n",
    "#### D. Bokeh visualization\n",
    "\n",
    "1. Use Bokeh to create an interactive visualization of the stock data you downloaded in Question 3. The HTML file that is generated should use the default content delivery network; i.e., it requires an internet connection to render properly.\n",
    "2. Use Bokeh to create an interactive visualization from a dataset of your choice. You can choose one of the datasets from a previous assignment (e.g., precipitation in La Jolla, moons of the Solar System, or the Earth Microbiome Project) or your own dataset. The HTML file that is generated should be a stand-alone file (`mode=inline`) that does not require an internet connection to render properly.\n",
    "\n",
    "#### E. Final project proposal\n",
    "\n",
    "The final project description is [here](https://github.com/cuttlefishh/python-for-data-analysis/blob/master/assignments/final_project.md). Write a short paragraph describing your proposed idea for the final project: the dataset you want to use, what analysis you want to do, and what you hope your code will do and look like when you are done. I will provide feedback when I grade your assignment. If you would like feedback sooner, please email me directly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import scipy\n",
    "from scipy import stats\n",
    "import pandas_datareader as pdr\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from bokeh.plotting import figure, output_file, show, ColumnDataSource\n",
    "from bokeh.models import HoverTool\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Question 1 - Student survey data wrangling\n",
    "\n",
    "Download the student survey data from [2015](https://raw.githubusercontent.com/cuttlefishh/python-for-data-analysis/master/data/survey_scores_2015_T.csv) and [2018](https://raw.githubusercontent.com/cuttlefishh/python-for-data-analysis/master/data/survey_scores_2018.csv) if you don't have them already. Import the csv files as DataFrames and inspect the files. Notice that the data are formatted differently. Next you will modify them so they are compatible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df15 = pd.read_csv('../../data/survey_scores_2015_T.csv')\n",
    "df18 = pd.read_csv('../../data/survey_scores_2018.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>subject_id</th>\n",
       "      <th>computer_has</th>\n",
       "      <th>computer_os</th>\n",
       "      <th>score_bash</th>\n",
       "      <th>score_command</th>\n",
       "      <th>score_matlab</th>\n",
       "      <th>score_perl</th>\n",
       "      <th>score_python</th>\n",
       "      <th>score_r</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10000</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13001</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>60985</td>\n",
       "      <td>Y</td>\n",
       "      <td>Windows</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>43309</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>89785</td>\n",
       "      <td>Y</td>\n",
       "      <td>Windows</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>57688</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>19366</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>97775</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>22384</td>\n",
       "      <td>Y</td>\n",
       "      <td>Windows</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>31556</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>70964</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>70155</td>\n",
       "      <td>Y</td>\n",
       "      <td>Linux</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>47724</td>\n",
       "      <td>Y</td>\n",
       "      <td>Mac</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>37602</td>\n",
       "      <td>Y</td>\n",
       "      <td>Linux</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    subject_id computer_has computer_os  score_bash  score_command  \\\n",
       "0        10000            N         NaN           0              0   \n",
       "1        13001            Y         Mac           1              2   \n",
       "2        60985            Y     Windows           0              1   \n",
       "3        43309            Y         Mac           3              3   \n",
       "4        89785            Y     Windows           2              2   \n",
       "5        57688            Y         Mac           1              1   \n",
       "6        19366            Y         Mac           0              2   \n",
       "7        97775            Y         Mac           2              2   \n",
       "8        22384            Y     Windows           0              0   \n",
       "9        31556            Y         Mac           1              2   \n",
       "10       70964            Y         Mac           1              1   \n",
       "11       70155            Y       Linux           1              1   \n",
       "12       47724            Y         Mac           0              0   \n",
       "13       37602            Y       Linux           2              2   \n",
       "\n",
       "    score_matlab  score_perl  score_python  score_r  \n",
       "0              0           0             0        0  \n",
       "1              3           0             0        0  \n",
       "2              1           0             2        1  \n",
       "3              0           0             1        2  \n",
       "4              0           1             2        2  \n",
       "5              1           0             0        0  \n",
       "6              3           0             0        2  \n",
       "7              3           0             1        0  \n",
       "8              2           0             0        2  \n",
       "9              3           0             0        0  \n",
       "10             2           0             1        2  \n",
       "11             1           0             1        0  \n",
       "12             1           0             0        0  \n",
       "13             0           1             1        2  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df15"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Respondent</th>\n",
       "      <th>Graduate program and advisor</th>\n",
       "      <th>Do you have your own laptop?</th>\n",
       "      <th>Which operating system do you run on your computer? (You may select more than one if you have multiple disk partitions or a virtual machine.)</th>\n",
       "      <th>What is your experience level with the command line?</th>\n",
       "      <th>What is your experience level with the R programming language?</th>\n",
       "      <th>What is your experience level with the MATLAB programming language?</th>\n",
       "      <th>What is your experience level with the Perl programming language?</th>\n",
       "      <th>What is your experience level with the Python programming language?</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1/9/2018 9:57:18</td>\n",
       "      <td>SDNT1</td>\n",
       "      <td>PhD: SIO: Jennifer Smith</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>Some</td>\n",
       "      <td>Moderate</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1/9/2018 9:57:53</td>\n",
       "      <td>SDNT2</td>\n",
       "      <td>PhD: SIO/Marine Biology: Lyons Lab</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1/9/2018 9:59:14</td>\n",
       "      <td>SDNT3</td>\n",
       "      <td>PhD: SIO/Biological Oceanography: Jeff Bowman</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1/9/2018 9:59:15</td>\n",
       "      <td>SDNT4</td>\n",
       "      <td>PhD: Structural Engineering: Hyonny Kim</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>Moderate</td>\n",
       "      <td>None</td>\n",
       "      <td>Experienced</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1/9/2018 9:59:36</td>\n",
       "      <td>SDNT5</td>\n",
       "      <td>MS: SIO/Marine Biology: Douglas Bartlett</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1/9/2018 9:59:38</td>\n",
       "      <td>SDNT6</td>\n",
       "      <td>PhD: SIO/Physical Oceanography, Uwe Send</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Windows, Unix</td>\n",
       "      <td>Moderate</td>\n",
       "      <td>None</td>\n",
       "      <td>Experienced</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1/9/2018 10:00:03</td>\n",
       "      <td>SDNT7</td>\n",
       "      <td>PhD: Economics: Dan Cayan</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac, Windows, Unix</td>\n",
       "      <td>Moderate</td>\n",
       "      <td>Experienced</td>\n",
       "      <td>Some</td>\n",
       "      <td>Some</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1/9/2018 10:00:21</td>\n",
       "      <td>SDNT8</td>\n",
       "      <td>PhD: Engineering Physics: Alexey Arefiev</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>Moderate</td>\n",
       "      <td>None</td>\n",
       "      <td>Experienced</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1/9/2018 10:01:22</td>\n",
       "      <td>SDNT9</td>\n",
       "      <td>PhD: Geophysics: Dave Stegman</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1/9/2018 11:13:57</td>\n",
       "      <td>SDNT10</td>\n",
       "      <td>Postdoc: NOAA/SWFSC: Andrew Thompson</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Windows, Unix</td>\n",
       "      <td>None</td>\n",
       "      <td>Moderate</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1/9/2018 18:14:28</td>\n",
       "      <td>SDNT11</td>\n",
       "      <td>PhD: SIO/Marine Biology: Greg Rouse</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Windows</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1/18/2018 17:10:41</td>\n",
       "      <td>SDNT12</td>\n",
       "      <td>PhD: BMS: Rob Knight + Karsten Zengler</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Mac</td>\n",
       "      <td>Some</td>\n",
       "      <td>Some</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>Some</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Timestamp Respondent  \\\n",
       "0     1/9/2018 9:57:18      SDNT1   \n",
       "1     1/9/2018 9:57:53      SDNT2   \n",
       "2     1/9/2018 9:59:14      SDNT3   \n",
       "3     1/9/2018 9:59:15      SDNT4   \n",
       "4     1/9/2018 9:59:36      SDNT5   \n",
       "5     1/9/2018 9:59:38      SDNT6   \n",
       "6    1/9/2018 10:00:03      SDNT7   \n",
       "7    1/9/2018 10:00:21      SDNT8   \n",
       "8    1/9/2018 10:01:22      SDNT9   \n",
       "9    1/9/2018 11:13:57     SDNT10   \n",
       "10   1/9/2018 18:14:28     SDNT11   \n",
       "11  1/18/2018 17:10:41     SDNT12   \n",
       "\n",
       "                     Graduate program and advisor  \\\n",
       "0                        PhD: SIO: Jennifer Smith   \n",
       "1              PhD: SIO/Marine Biology: Lyons Lab   \n",
       "2   PhD: SIO/Biological Oceanography: Jeff Bowman   \n",
       "3         PhD: Structural Engineering: Hyonny Kim   \n",
       "4        MS: SIO/Marine Biology: Douglas Bartlett   \n",
       "5        PhD: SIO/Physical Oceanography, Uwe Send   \n",
       "6                       PhD: Economics: Dan Cayan   \n",
       "7        PhD: Engineering Physics: Alexey Arefiev   \n",
       "8                   PhD: Geophysics: Dave Stegman   \n",
       "9            Postdoc: NOAA/SWFSC: Andrew Thompson   \n",
       "10            PhD: SIO/Marine Biology: Greg Rouse   \n",
       "11         PhD: BMS: Rob Knight + Karsten Zengler   \n",
       "\n",
       "   Do you have your own laptop?  \\\n",
       "0                           Yes   \n",
       "1                           Yes   \n",
       "2                           Yes   \n",
       "3                           Yes   \n",
       "4                           Yes   \n",
       "5                           Yes   \n",
       "6                           Yes   \n",
       "7                           Yes   \n",
       "8                           Yes   \n",
       "9                           Yes   \n",
       "10                          Yes   \n",
       "11                          Yes   \n",
       "\n",
       "   Which operating system do you run on your computer? (You may select more than one if you have multiple disk partitions or a virtual machine.)  \\\n",
       "0                                                 Mac                                                                                              \n",
       "1                                                 Mac                                                                                              \n",
       "2                                                 Mac                                                                                              \n",
       "3                                                 Mac                                                                                              \n",
       "4                                                 Mac                                                                                              \n",
       "5                                       Windows, Unix                                                                                              \n",
       "6                                  Mac, Windows, Unix                                                                                              \n",
       "7                                                 Mac                                                                                              \n",
       "8                                                 Mac                                                                                              \n",
       "9                                       Windows, Unix                                                                                              \n",
       "10                                            Windows                                                                                              \n",
       "11                                                Mac                                                                                              \n",
       "\n",
       "   What is your experience level with the command line?  \\\n",
       "0                                                Some     \n",
       "1                                                Some     \n",
       "2                                                None     \n",
       "3                                            Moderate     \n",
       "4                                                None     \n",
       "5                                            Moderate     \n",
       "6                                            Moderate     \n",
       "7                                            Moderate     \n",
       "8                                                Some     \n",
       "9                                                None     \n",
       "10                                               None     \n",
       "11                                               Some     \n",
       "\n",
       "   What is your experience level with the R programming language?  \\\n",
       "0                                            Moderate               \n",
       "1                                                None               \n",
       "2                                                None               \n",
       "3                                                None               \n",
       "4                                                None               \n",
       "5                                                None               \n",
       "6                                         Experienced               \n",
       "7                                                None               \n",
       "8                                                None               \n",
       "9                                            Moderate               \n",
       "10                                               Some               \n",
       "11                                               Some               \n",
       "\n",
       "   What is your experience level with the MATLAB programming language?  \\\n",
       "0                                                None                    \n",
       "1                                                None                    \n",
       "2                                                None                    \n",
       "3                                         Experienced                    \n",
       "4                                                Some                    \n",
       "5                                         Experienced                    \n",
       "6                                                Some                    \n",
       "7                                         Experienced                    \n",
       "8                                                Some                    \n",
       "9                                                Some                    \n",
       "10                                               None                    \n",
       "11                                               None                    \n",
       "\n",
       "   What is your experience level with the Perl programming language?  \\\n",
       "0                                                None                  \n",
       "1                                                None                  \n",
       "2                                                None                  \n",
       "3                                                None                  \n",
       "4                                                None                  \n",
       "5                                                Some                  \n",
       "6                                                Some                  \n",
       "7                                                None                  \n",
       "8                                                None                  \n",
       "9                                                None                  \n",
       "10                                               None                  \n",
       "11                                               None                  \n",
       "\n",
       "   What is your experience level with the Python programming language?  \n",
       "0                                                Some                   \n",
       "1                                                Some                   \n",
       "2                                                None                   \n",
       "3                                                Some                   \n",
       "4                                                None                   \n",
       "5                                                None                   \n",
       "6                                                Some                   \n",
       "7                                                None                   \n",
       "8                                                Some                   \n",
       "9                                                None                   \n",
       "10                                               Some                   \n",
       "11                                               Some                   "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df18"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The 2015 data is mostly ready to go. Just convert the Y/N values to True/False (boolean)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "df15.computer_has = df15.computer_has.map({'Y': True, 'N': False})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The 2018 data needs a lot of work. Delete the 'Timestamp' and 'Graduate program and advisor' columns. Rename the remaining columns to match those in 2015. Convert the Yes/No values to True/False (boolean). Convert the None/Some/Moderate/Experienced values to 0/1/2/3 (integers). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "df18.drop(['Timestamp', 'Graduate program and advisor'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "df18.columns = ['subject_id', 'computer_has', 'computer_os', 'score_command', \n",
    "                'score_r', 'score_matlab', 'score_perl', 'score_python']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "df18.computer_has = df18.computer_has.map({'Yes': True, 'N0': False})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in ['score_command', 'score_r', 'score_matlab', 'score_perl', 'score_python']:\n",
    "    df18[i] = df18[i].map({'None': 0, 'Some': 1, 'Moderate': 2, 'Experienced': 3})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Question 2 - Statistical analysis\n",
    "\n",
    "In both years, some students have Macs and some have Windows computers. Test the hypothesis that the proportions of Mac and Windows users are the same in 2015 and 2018. Note that in 2018, the question was asked differently and some people listed multiple operating systems; for the purposes of this question, assume that SDNT6 and SDNT10 have Windows computers and SDNT7 has a Mac."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>We can use a Fisher's exact test. We want a DataFrame where the columns are observations (Mac, Windows) and the rows are trials (2015, 2018).</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Mac        8\n",
       "Windows    3\n",
       "Linux      2\n",
       "Name: computer_os, dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df15.computer_os.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Mac        9\n",
       "Windows    3\n",
       "Name: comp, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df18['comp'] = [x.split(', ')[0] for x in df18.computer_os]\n",
    "df18['comp'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Mac</th>\n",
       "      <th>Windows</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015</th>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Mac  Windows\n",
       "2015    8        3\n",
       "2018    9        3"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_comp = pd.DataFrame([[8, 3],[9, 3]],\n",
    "                       index=['2015', '2018'],\n",
    "                       columns=['Mac', 'Windows'])\n",
    "df_comp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.8888888888888888, 1.0)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "odds_ratio, p_value = scipy.stats.fisher_exact(df_comp, alternative='two-sided')\n",
    "odds_ratio, p_value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>Answer: The proportion of Mac vs. Windows users in the two years is statistically the same.</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For each of the 'score' columns shared by both datasets (there are five), use a two-sample *t*-test to determine if the two samples have equal means. Note: To use `scipy.stats`, you may have to import it directly like so: `from scipy import stats`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8626373626373626 0.7272727272727273\n",
      "0.9945054945054944 1.1136363636363635\n",
      "1.4945054945054947 1.537878787878788\n",
      "0.1318681318681319 0.1515151515151515\n",
      "0.5549450549450551 0.2651515151515152\n"
     ]
    }
   ],
   "source": [
    "for i in ['score_command', 'score_r', 'score_matlab', 'score_perl', 'score_python']:\n",
    "    print(df15[i].var(), df18[i].var())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>We should treat the variances as unequal.</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score_command\t1.021563746459407\t0.3172322842292431\n",
      "score_r\t0.4411671300323681\t0.6632254405953542\n",
      "score_matlab\t0.7123128373310325\t0.48334768978717324\n",
      "score_perl\t-0.1603583471369465\t0.8740112001709535\n",
      "score_python\t0.23956610481392648\t0.812782931635454\n"
     ]
    }
   ],
   "source": [
    "for i in ['score_command', 'score_r', 'score_matlab', 'score_perl', 'score_python']:\n",
    "    t, p = scipy.stats.ttest_ind(df15[i], df18[i], equal_var=False)\n",
    "    print('%s\\t%s\\t%s' % (i, t, p))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "<span style='color:red'>Answer: None of the means are different from each other with alpha = 0.05.</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Question 3 - Stock data\n",
    "\n",
    "Download historical stock data from the past three years for a stock of your choice (eligible symbols: [here](https://iextrading.com/trading/eligible-symbols/)) and the S&P 500 index (symbol: 'SPY'). Use Panads timeseries operations to calculate the start and end dates. IEX is currently a reliable source of data that does not require registration (see [pandas-datareader docs](https://pydata.github.io/pandas-datareader/stable/remote_data.html)). Note that using IEX will return a hierarchical column index, where the first column index is the price type ('open', 'high', 'low', 'close', 'volume') and the second column index is the symbol. You may also want to convert the index from string/object type to datetime type. For example, to download stock data for Qualcomm and Illumina and see the close data for Qualcomm, use these commands, where `start` and `end` are Pandas datatime objects: \n",
    "\n",
    "        import pandas_datareader as pdr\n",
    "        quotes = pdr.data.DataReader(['QCOM', 'ILMN'], 'iex', start, end)\n",
    "        quotes.set_index(pd.to_datetime(quotes.index), inplace=True)\n",
    "        quotes['close']['QCOM']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "start = pd.datetime.today() - pd.DateOffset(years=3) # exactly 3 years before today\n",
    "end = pd.datetime.today() - pd.DateOffset(days=1) # yesterday"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th>Attributes</th>\n",
       "      <th colspan=\"2\" halign=\"left\">open</th>\n",
       "      <th colspan=\"2\" halign=\"left\">high</th>\n",
       "      <th colspan=\"2\" halign=\"left\">low</th>\n",
       "      <th colspan=\"2\" halign=\"left\">close</th>\n",
       "      <th colspan=\"2\" halign=\"left\">volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Symbols</th>\n",
       "      <th>SPY</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>SPY</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>SPY</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>SPY</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>SPY</th>\n",
       "      <th>TSLA</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2015-11-27</th>\n",
       "      <td>197.3578</td>\n",
       "      <td>231.06</td>\n",
       "      <td>197.7064</td>\n",
       "      <td>232.25</td>\n",
       "      <td>196.8206</td>\n",
       "      <td>227.01</td>\n",
       "      <td>197.4803</td>\n",
       "      <td>231.61</td>\n",
       "      <td>37317779</td>\n",
       "      <td>1949353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-11-30</th>\n",
       "      <td>197.6593</td>\n",
       "      <td>231.79</td>\n",
       "      <td>197.7912</td>\n",
       "      <td>234.28</td>\n",
       "      <td>196.5379</td>\n",
       "      <td>229.08</td>\n",
       "      <td>196.6604</td>\n",
       "      <td>230.26</td>\n",
       "      <td>112822700</td>\n",
       "      <td>2659813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-12-01</th>\n",
       "      <td>197.3672</td>\n",
       "      <td>231.06</td>\n",
       "      <td>198.6676</td>\n",
       "      <td>238.00</td>\n",
       "      <td>197.0562</td>\n",
       "      <td>231.05</td>\n",
       "      <td>198.5357</td>\n",
       "      <td>237.19</td>\n",
       "      <td>97858418</td>\n",
       "      <td>3733955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-12-02</th>\n",
       "      <td>198.4745</td>\n",
       "      <td>237.00</td>\n",
       "      <td>198.8373</td>\n",
       "      <td>238.60</td>\n",
       "      <td>196.2269</td>\n",
       "      <td>231.23</td>\n",
       "      <td>196.5087</td>\n",
       "      <td>231.99</td>\n",
       "      <td>108441259</td>\n",
       "      <td>2981468</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015-12-03</th>\n",
       "      <td>196.7923</td>\n",
       "      <td>235.48</td>\n",
       "      <td>197.0939</td>\n",
       "      <td>237.45</td>\n",
       "      <td>192.9486</td>\n",
       "      <td>230.00</td>\n",
       "      <td>193.7580</td>\n",
       "      <td>232.71</td>\n",
       "      <td>166224154</td>\n",
       "      <td>2939564</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Attributes      open              high               low             close  \\\n",
       "Symbols          SPY    TSLA       SPY    TSLA       SPY    TSLA       SPY   \n",
       "date                                                                         \n",
       "2015-11-27  197.3578  231.06  197.7064  232.25  196.8206  227.01  197.4803   \n",
       "2015-11-30  197.6593  231.79  197.7912  234.28  196.5379  229.08  196.6604   \n",
       "2015-12-01  197.3672  231.06  198.6676  238.00  197.0562  231.05  198.5357   \n",
       "2015-12-02  198.4745  237.00  198.8373  238.60  196.2269  231.23  196.5087   \n",
       "2015-12-03  196.7923  235.48  197.0939  237.45  192.9486  230.00  193.7580   \n",
       "\n",
       "Attributes             volume           \n",
       "Symbols       TSLA        SPY     TSLA  \n",
       "date                                    \n",
       "2015-11-27  231.61   37317779  1949353  \n",
       "2015-11-30  230.26  112822700  2659813  \n",
       "2015-12-01  237.19   97858418  3733955  \n",
       "2015-12-02  231.99  108441259  2981468  \n",
       "2015-12-03  232.71  166224154  2939564  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "quotes = pdr.data.DataReader(['TSLA', 'SPY'], 'iex', start, end)\n",
    "quotes.set_index(pd.to_datetime(quotes.index), inplace=True)\n",
    "quotes.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the 52-week high and low for the past year for your stock and for the S&P 500."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "one_year_ago = pd.datetime.today() - pd.DateOffset(years=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "tsla_52wk = quotes['close']['TSLA'].loc[one_year_ago:end]\n",
    "spy_52wk = quotes['close']['SPY'].loc[one_year_ago:end]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(379.57, 250.56)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tsla_52wk.max(), tsla_52wk.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(292.2574, 254.305)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spy_52wk.max(), spy_52wk.min()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>Answer: The 52-week closing price high and low of TSLA are 379.6 and 250.6, and for the SPDR S&P 500 ETF Trust are 292.3 and 23254.3.</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the price at close over the past three years of your stock and the S&P 500. Use a dual y-axis (using `twinx` like we learned in the Matplotlib lesson) to display the two prices side by side on separate scales."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax1 = plt.subplots()\n",
    "\n",
    "ax1.plot(quotes['close']['TSLA'].index, quotes['close']['TSLA'], color='b')\n",
    "ax1.set_ylabel('Tesla', color='b')\n",
    "for label in ax1.get_yticklabels():\n",
    "    label.set_color('b')\n",
    "\n",
    "ax2 = ax1.twinx()\n",
    "ax2.plot(quotes['close']['SPY'].index, quotes['close']['SPY'], color='r')\n",
    "ax2.set_ylabel('SPDR S&P 500 ETF Trust', color='r')\n",
    "for label in ax2.get_yticklabels():\n",
    "    label.set_color('r')\n",
    "    \n",
    "plt.setp(ax1.xaxis.get_majorticklabels(), rotation=45);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate the percent change from three years ago for both prices. How did your stock perform relative to the S&P 500?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def stock_return(quotes, symbol, t1, t2):\n",
    "    price_t1 = quotes['close'][symbol].loc[t1]\n",
    "    price_t2 = quotes['close'][symbol].loc[t2]\n",
    "    return((price_t2 - price_t1)/price_t1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "quotes_ffill = quotes.asfreq('D', method='ffill')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.49389059194335294"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_return(quotes_ffill, 'TSLA', start.date(), end.date())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.35456549336819926"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_return(quotes_ffill, 'SPY', start.date(), end.date())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>Answer: Tesla was more volatile than the S&P 500, and it also had a greater return, 49% for TSLA compared with 35% for the S&P 500.</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Question 4 - Bokeh visualization\n",
    "\n",
    "Use Bokeh to create an interactive visualization of the stock data you downloaded in Question 3. The HTML file that is generated should use the default content delivery network; i.e., it requires an internet connection to render properly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_file('stock_price_tsla_spy.html')\n",
    "\n",
    "tools = 'pan, wheel_zoom, box_zoom, reset, save, hover, undo, redo'\n",
    "\n",
    "p = figure(width=1000, height=600, x_axis_type='datetime', tools=tools, title='Tesla stock price and the S&P 500')\n",
    "\n",
    "p.line(quotes['close']['TSLA'].index, quotes['close']['TSLA'], color='blue', legend='TSLA')\n",
    "p.line(quotes['close']['SPY'].index, quotes['close']['SPY'], color='red', legend='SPY')\n",
    "\n",
    "p.ygrid.band_fill_color='gray'\n",
    "p.ygrid.band_fill_alpha = 0.1\n",
    "\n",
    "p.xaxis.axis_label = 'Date'\n",
    "p.yaxis.axis_label = 'Price'\n",
    "\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use Bokeh to create an interactive visualization from a dataset of your choice. You can choose one of the datasets from a previous assignment (e.g., precipitation in La Jolla, moons of the Solar System, or the Earth Microbiome Project) or your own dataset. The HTML file that is generated should be a stand-alone file (`mode=inline`) that does not require an internet connection to render properly."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>I am choosing to create interactive plots of the moon data. First I import the data and generate the volume columns.</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>moon_name</th>\n",
       "      <th>planet_name</th>\n",
       "      <th>moon_planet_distance_km</th>\n",
       "      <th>moon_diameter_km</th>\n",
       "      <th>planet_diameter_km</th>\n",
       "      <th>planet_sun_distance_km</th>\n",
       "      <th>planet_sun_distance_au</th>\n",
       "      <th>moon_volume_km3</th>\n",
       "      <th>planet_volume_km3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Moon</td>\n",
       "      <td>Earth</td>\n",
       "      <td>384000</td>\n",
       "      <td>3476</td>\n",
       "      <td>12742</td>\n",
       "      <td>1.495979e+08</td>\n",
       "      <td>1.000</td>\n",
       "      <td>2.199064e+10</td>\n",
       "      <td>1.083207e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Deimos</td>\n",
       "      <td>Mars</td>\n",
       "      <td>9270</td>\n",
       "      <td>20</td>\n",
       "      <td>6779</td>\n",
       "      <td>2.281368e+08</td>\n",
       "      <td>1.525</td>\n",
       "      <td>4.188790e+03</td>\n",
       "      <td>1.631156e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Phobos</td>\n",
       "      <td>Mars</td>\n",
       "      <td>23460</td>\n",
       "      <td>8</td>\n",
       "      <td>6779</td>\n",
       "      <td>2.281368e+08</td>\n",
       "      <td>1.525</td>\n",
       "      <td>2.680826e+02</td>\n",
       "      <td>1.631156e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Callisto</td>\n",
       "      <td>Jupiter</td>\n",
       "      <td>1883000</td>\n",
       "      <td>4800</td>\n",
       "      <td>139822</td>\n",
       "      <td>7.786569e+08</td>\n",
       "      <td>5.205</td>\n",
       "      <td>5.790584e+10</td>\n",
       "      <td>1.431282e+15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Europa</td>\n",
       "      <td>Jupiter</td>\n",
       "      <td>670900</td>\n",
       "      <td>3126</td>\n",
       "      <td>139822</td>\n",
       "      <td>7.786569e+08</td>\n",
       "      <td>5.205</td>\n",
       "      <td>1.599431e+10</td>\n",
       "      <td>1.431282e+15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Ganymede</td>\n",
       "      <td>Jupiter</td>\n",
       "      <td>1070000</td>\n",
       "      <td>5276</td>\n",
       "      <td>139822</td>\n",
       "      <td>7.786569e+08</td>\n",
       "      <td>5.205</td>\n",
       "      <td>7.689763e+10</td>\n",
       "      <td>1.431282e+15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Io</td>\n",
       "      <td>Jupiter</td>\n",
       "      <td>421600</td>\n",
       "      <td>3629</td>\n",
       "      <td>139822</td>\n",
       "      <td>7.786569e+08</td>\n",
       "      <td>5.205</td>\n",
       "      <td>2.502416e+10</td>\n",
       "      <td>1.431282e+15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Dione</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>377400</td>\n",
       "      <td>1120</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>7.356186e+08</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Enceladus</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>238020</td>\n",
       "      <td>498</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>6.466759e+07</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Hyperion</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>1481000</td>\n",
       "      <td>226</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>6.043993e+06</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Iapetus</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>3561300</td>\n",
       "      <td>1436</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>1.550465e+09</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Mimas</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>185520</td>\n",
       "      <td>398</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>3.301018e+07</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Phoebe</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>12952000</td>\n",
       "      <td>220</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>5.575280e+06</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Rhea</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>527040</td>\n",
       "      <td>1528</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>1.867965e+09</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Tethys</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>294660</td>\n",
       "      <td>1060</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>6.236145e+08</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Titan</td>\n",
       "      <td>Saturn</td>\n",
       "      <td>1221850</td>\n",
       "      <td>5150</td>\n",
       "      <td>116464</td>\n",
       "      <td>1.427912e+09</td>\n",
       "      <td>9.545</td>\n",
       "      <td>7.151881e+10</td>\n",
       "      <td>8.271299e+14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Ariel</td>\n",
       "      <td>Uranus</td>\n",
       "      <td>191240</td>\n",
       "      <td>1160</td>\n",
       "      <td>50724</td>\n",
       "      <td>2.872279e+09</td>\n",
       "      <td>19.200</td>\n",
       "      <td>8.172832e+08</td>\n",
       "      <td>6.833436e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Miranda</td>\n",
       "      <td>Uranus</td>\n",
       "      <td>129780</td>\n",
       "      <td>472</td>\n",
       "      <td>50724</td>\n",
       "      <td>2.872279e+09</td>\n",
       "      <td>19.200</td>\n",
       "      <td>5.505853e+07</td>\n",
       "      <td>6.833436e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Oberon</td>\n",
       "      <td>Uranus</td>\n",
       "      <td>582600</td>\n",
       "      <td>1526</td>\n",
       "      <td>50724</td>\n",
       "      <td>2.872279e+09</td>\n",
       "      <td>19.200</td>\n",
       "      <td>1.860639e+09</td>\n",
       "      <td>6.833436e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Titania</td>\n",
       "      <td>Uranus</td>\n",
       "      <td>435840</td>\n",
       "      <td>1580</td>\n",
       "      <td>50724</td>\n",
       "      <td>2.872279e+09</td>\n",
       "      <td>19.200</td>\n",
       "      <td>2.065237e+09</td>\n",
       "      <td>6.833436e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Umbriel</td>\n",
       "      <td>Uranus</td>\n",
       "      <td>265970</td>\n",
       "      <td>1190</td>\n",
       "      <td>50724</td>\n",
       "      <td>2.872279e+09</td>\n",
       "      <td>19.200</td>\n",
       "      <td>8.823472e+08</td>\n",
       "      <td>6.833436e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Nereid</td>\n",
       "      <td>Neptune</td>\n",
       "      <td>5513400</td>\n",
       "      <td>340</td>\n",
       "      <td>49244</td>\n",
       "      <td>4.495416e+09</td>\n",
       "      <td>30.050</td>\n",
       "      <td>2.057953e+07</td>\n",
       "      <td>6.252570e+13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Triton</td>\n",
       "      <td>Neptune</td>\n",
       "      <td>354800</td>\n",
       "      <td>2705</td>\n",
       "      <td>49244</td>\n",
       "      <td>4.495416e+09</td>\n",
       "      <td>30.050</td>\n",
       "      <td>1.036336e+10</td>\n",
       "      <td>6.252570e+13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    moon_name planet_name  moon_planet_distance_km  moon_diameter_km  \\\n",
       "0        Moon       Earth                   384000              3476   \n",
       "1      Deimos        Mars                     9270                20   \n",
       "2      Phobos        Mars                    23460                 8   \n",
       "3    Callisto     Jupiter                  1883000              4800   \n",
       "4      Europa     Jupiter                   670900              3126   \n",
       "5    Ganymede     Jupiter                  1070000              5276   \n",
       "6          Io     Jupiter                   421600              3629   \n",
       "7       Dione      Saturn                   377400              1120   \n",
       "8   Enceladus      Saturn                   238020               498   \n",
       "9    Hyperion      Saturn                  1481000               226   \n",
       "10    Iapetus      Saturn                  3561300              1436   \n",
       "11      Mimas      Saturn                   185520               398   \n",
       "12     Phoebe      Saturn                 12952000               220   \n",
       "13       Rhea      Saturn                   527040              1528   \n",
       "14     Tethys      Saturn                   294660              1060   \n",
       "15      Titan      Saturn                  1221850              5150   \n",
       "16      Ariel      Uranus                   191240              1160   \n",
       "17    Miranda      Uranus                   129780               472   \n",
       "18     Oberon      Uranus                   582600              1526   \n",
       "19    Titania      Uranus                   435840              1580   \n",
       "20    Umbriel      Uranus                   265970              1190   \n",
       "21     Nereid     Neptune                  5513400               340   \n",
       "22     Triton     Neptune                   354800              2705   \n",
       "\n",
       "    planet_diameter_km  planet_sun_distance_km  planet_sun_distance_au  \\\n",
       "0                12742            1.495979e+08                   1.000   \n",
       "1                 6779            2.281368e+08                   1.525   \n",
       "2                 6779            2.281368e+08                   1.525   \n",
       "3               139822            7.786569e+08                   5.205   \n",
       "4               139822            7.786569e+08                   5.205   \n",
       "5               139822            7.786569e+08                   5.205   \n",
       "6               139822            7.786569e+08                   5.205   \n",
       "7               116464            1.427912e+09                   9.545   \n",
       "8               116464            1.427912e+09                   9.545   \n",
       "9               116464            1.427912e+09                   9.545   \n",
       "10              116464            1.427912e+09                   9.545   \n",
       "11              116464            1.427912e+09                   9.545   \n",
       "12              116464            1.427912e+09                   9.545   \n",
       "13              116464            1.427912e+09                   9.545   \n",
       "14              116464            1.427912e+09                   9.545   \n",
       "15              116464            1.427912e+09                   9.545   \n",
       "16               50724            2.872279e+09                  19.200   \n",
       "17               50724            2.872279e+09                  19.200   \n",
       "18               50724            2.872279e+09                  19.200   \n",
       "19               50724            2.872279e+09                  19.200   \n",
       "20               50724            2.872279e+09                  19.200   \n",
       "21               49244            4.495416e+09                  30.050   \n",
       "22               49244            4.495416e+09                  30.050   \n",
       "\n",
       "    moon_volume_km3  planet_volume_km3  \n",
       "0      2.199064e+10       1.083207e+12  \n",
       "1      4.188790e+03       1.631156e+11  \n",
       "2      2.680826e+02       1.631156e+11  \n",
       "3      5.790584e+10       1.431282e+15  \n",
       "4      1.599431e+10       1.431282e+15  \n",
       "5      7.689763e+10       1.431282e+15  \n",
       "6      2.502416e+10       1.431282e+15  \n",
       "7      7.356186e+08       8.271299e+14  \n",
       "8      6.466759e+07       8.271299e+14  \n",
       "9      6.043993e+06       8.271299e+14  \n",
       "10     1.550465e+09       8.271299e+14  \n",
       "11     3.301018e+07       8.271299e+14  \n",
       "12     5.575280e+06       8.271299e+14  \n",
       "13     1.867965e+09       8.271299e+14  \n",
       "14     6.236145e+08       8.271299e+14  \n",
       "15     7.151881e+10       8.271299e+14  \n",
       "16     8.172832e+08       6.833436e+13  \n",
       "17     5.505853e+07       6.833436e+13  \n",
       "18     1.860639e+09       6.833436e+13  \n",
       "19     2.065237e+09       6.833436e+13  \n",
       "20     8.823472e+08       6.833436e+13  \n",
       "21     2.057953e+07       6.252570e+13  \n",
       "22     1.036336e+10       6.252570e+13  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_moons = pd.read_excel('../../data/moons.xlsx')\n",
    "df_planets = pd.read_excel('../../data/planets.xlsx')\n",
    "df_solar = pd.merge(df_moons, df_planets, left_on='planet_name', right_on='planet_name')\n",
    "df_solar['moon_volume_km3'] = 4/3*np.pi*(df_solar.moon_diameter_km/2)**3\n",
    "df_solar['planet_volume_km3'] = 4/3*np.pi*(df_solar.planet_diameter_km/2)**3\n",
    "df_solar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "colors = {\n",
    "    'Mars': 'red',\n",
    "    'Earth': 'blue',\n",
    "    'Jupiter': 'orange',\n",
    "    'Saturn': 'green',\n",
    "    'Uranus': 'cyan',\n",
    "    'Neptune': 'purple'}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<span style='color:red'>Now I generate an interactive scatter plot of the diameters, then an interactive plot of the volumes. Notice some modifications: 1) HoverTool shows the moon and planet names and values and the ratio of values. 2) Circles are sized by moon size, except a pseudocount of 5 has been added to each value so that Mars's tiny moons Phobos and Deimos are visible. 3) Circles are colored by planet.</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_file('moon_diameter.html', mode='inline')\n",
    "\n",
    "source = ColumnDataSource(data=dict(\n",
    "    x=df_solar.planet_diameter_km,\n",
    "    y=df_solar.moon_diameter_km,\n",
    "    ratio=df_solar.moon_diameter_km/df_solar.planet_diameter_km,\n",
    "    planet=df_solar.planet_name,\n",
    "    moon=df_solar.moon_name,\n",
    "    size=df_solar.moon_diameter_km/200 + 5,\n",
    "    color=[colors[x] for x in df_solar.planet_name]\n",
    "))\n",
    "\n",
    "hover = HoverTool(tooltips=[\n",
    "    (\"moon name\", \"@moon\"),\n",
    "    (\"moon diameter\", \"@y\"),\n",
    "    (\"planet name\", \"@planet\"),\n",
    "    (\"planet diameter\", \"@x\"),\n",
    "    (\"ratio\", \"@ratio\")\n",
    "])\n",
    "\n",
    "tools = [hover, 'pan, wheel_zoom, box_zoom, reset, save, undo, redo']\n",
    "\n",
    "p = figure(width=1000, height=600, tools=tools, title='Moons of the Solar System, by diameter')\n",
    "\n",
    "p.circle(x='x', y='y', size='size', fill_color='color', line_color='black', source=source)\n",
    "\n",
    "p.xaxis.axis_label = 'Planet diameter (km)'\n",
    "p.yaxis.axis_label = 'Moon diameter (km)'\n",
    "\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_file('moon_volume.html', mode='inline')\n",
    "\n",
    "source = ColumnDataSource(data=dict(\n",
    "    x=df_solar.planet_volume_km3,\n",
    "    y=df_solar.moon_volume_km3,\n",
    "    ratio=df_solar.moon_volume_km3/df_solar.planet_volume_km3,\n",
    "    planet=df_solar.planet_name,\n",
    "    moon=df_solar.moon_name,\n",
    "    size=df_solar.moon_diameter_km/200 + 5,\n",
    "    color=[colors[x] for x in df_solar.planet_name]\n",
    "))\n",
    "\n",
    "hover = HoverTool(tooltips=[\n",
    "    (\"moon name\", \"@moon\"),\n",
    "    (\"moon volume\", \"@y\"),\n",
    "    (\"planet name\", \"@planet\"),\n",
    "    (\"planet volume\", \"@x\"),\n",
    "    (\"ratio\", \"@ratio\")\n",
    "])\n",
    "\n",
    "tools = [hover, 'pan, wheel_zoom, box_zoom, reset, save, undo, redo']\n",
    "\n",
    "p = figure(width=1000, height=600, tools=tools, title='Moons of the Solar System, by volume')\n",
    "\n",
    "p.circle(x='x', y='y', size='size', fill_color='color', line_color='black', source=source)\n",
    "\n",
    "p.xaxis.axis_label = 'Planet volume (km^3)'\n",
    "p.yaxis.axis_label = 'Moon volume (km^3)'\n",
    "\n",
    "show(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
